/**
 * @resource:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
 * @author junzhongliu
 * @date 2018/12/27 13:01
 */
public class SwapPairs {

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        listNode1.setNext(listNode2);
        listNode2.setNext(listNode3);
        listNode3.setNext(listNode4);
        listNode4.setNext(listNode5);
        listNode5.setNext(null);
        System.out.println("原链表===="+ listNode1.toString());

        ListNode listNode = swapPairs(listNode1);
        System.out.println("反转之后的链表===="+ listNode.toString());
    }

    public static ListNode swapPairs(ListNode head){
        if(head==null){
            return null;
        }
        //防止节点断开设置的节点
        ListNode tmpNode = new ListNode(0);
        tmpNode.next = head;
        //最终的返回结果,tmpNode是会改变的
        ListNode result = tmpNode;
        while(tmpNode.next!=null && tmpNode.next.next!=null){
            //要交换的节点1
            ListNode node1 = tmpNode.next;
            //要交换的节点2
            ListNode node2 = tmpNode.next.next;
            //第一个节点的下一个指向第二个节点的下一个，此时第二个节点空出来
            node1.next = node2.next;
            node2.next = node1;
            tmpNode.next = node2;

            tmpNode = tmpNode.next.next;
        }

        return result.next;
    }

}
